web-dev-qa-db-ja.com

Selenium Webdriverのページコンテンツのズームイン/アウト

Selenium Webドライバーでページのズームレベルを変更する方法私は試した:

driver.Keyboard().pressKey(Keys.Control);
driver.Keyboard().pressKey(Keys.Add);

しかし、それは機能しません。

21
user2099471

Seleniumはズームレベルが100%であると想定していることに注意してください!たとえば、IEは、ズームレベルが異なる場合、開始を拒否します(例外をスローします)。これは、要素の位置がこれに依存し、ズームレベルを変更した場合、間違った要素をクリックするためです。 、間違った場所で。


Java

Keys.chord() メソッドを使用できます。

_WebElement html = driver.findElement(By.tagName("html"));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));
_

慎重に使用し、完了したらズームを100%にリセットします。

_html.sendKeys(Keys.chord(Keys.CONTROL, "0"));
_

C#

(C#バインディングにはKeys.chord()メソッドがないことに気付いたので)

または、 Advanced User Interactions API を次のように使用できます(再び、Javaコードですが、C#でも同じように動作するはずです):

_WebElement html = driver.findElement(By.tagName("html"));

new Actions(driver)
    .sendKeys(html, Keys.CONTROL, Keys.ADD, Keys.NULL)
    .perform();
_

繰り返しますが、ズームを後でリセットすることを忘れないでください:

_new Actions(driver)
    .sendKeys(html, Keys.CONTROL, "0", Keys.NULL)
    .perform();
_

ナイーブなアプローチに注意してください

_html.sendKeys(Keys.CONTROL, Keys.ADD);
_

動作しません Ctrl キーはこのsendKeys()メソッドでリリースされます。 WebElementsendKeys() は、 Actionsにあるもの とは異なります。このため、私のソリューションで使用されている_Keys.NULL_はrequiredです。

25
Petr Janeček

あなたがズームレベルを指定する必要があることを除いて、Pythonアプローチは私のために働いています:

driver.execute_script("document.body.style.zoom='zoom %'")

'zoom%' =任意のズームレベルを設定します。 (例:'67% ')。これは、send_keysコマンドを受け入れないように見えるChromedriverで機能します。

5
Ben

ズームレベルをJavaで変更できる2つの方法を次に示します(1つはChrome用で、もう1つはFirefox用です):


Chrome

Seleniumの v̲e̲r̲s̲i̲o̲n̲ ̲3̲.̲3̲.̲1 を使用する場合Javaクライアントドライバーおよび C̲h̲r̲o̲m̲e̲D̲r̲i̲v̲e̲r̲ ̲2̲.̲2̲8 単一引用符で囲んだ部分は、使用するズームレベルを表します; 1 = 100%、1.5 = 150%など):

JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("document.body.style.zoom = '1.5'");

Firefox

ズームレベルは次のように変更できます。
1。前述のJavaクライアントドライバー
2。 G̲e̲c̲k̲o̲D̲r̲i̲v̲e̲r̲ ̲v̲0̲.̲1̲5̲.̲
3。これらのクラス:
Java.awt.Robot
Java.awt.event.KeyEvent

まず、ロボットクラスをインスタンス化します。

Robot robot = new Robot();

このコードにより、ズームレベルがdecreaseになります。

robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_MINUS);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_MINUS);

このコードにより、ズームレベルがincreaseになります。

robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_EQUALS);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_EQUALS);
4
User253489

ズームイン | ズームアウトWindowsの機能

ズームイン

WebElement html = driver.findElement(By.tagName("html"));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));

ズームアウトする

html.sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT));

ズームイン | ズームアウトMACの機能

ズームイン

WebElement html = driver.findElement(By.tagName("html"));
html.sendKeys(Keys.chord(Keys.COMMAND, Keys.ADD));

ズームアウトする

html.sendKeys(Keys.chord(Keys.COMMAND, Keys.SUBTRACT));
4
Prashanth Sams

最も堅牢なアプローチ

Internet ExplorerとSelenium Webdriverを使用する前に、これら2つの重要なルールを検討してください。

  1. ズームレベル:デフォルト(100%)に設定する必要があります
  2. セキュリティゾーンの設定:すべて同じです。セキュリティ設定は、組織の許可に従って設定する必要があります。

これを設定する方法?

Internet Explorerに移動し、両方の作業を手動で行います。それでおしまい。秘密はありません。

コードで実行します。

方法1:

//Move the following line into code format
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();

capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);

System.setProperty("webdriver.ie.driver","D:\\IEDriverServer_Win32_2.33.0\\IEDriverServer.exe");

WebDriver driver= new InternetExplorerDriver(capabilities);

driver.get(baseURl);

//Identify your elements and go ahead testing...

これは間違いなくエラーを表示せず、ブラウザが開き、URLに移動します。

ただし、これは要素を特定しないため、続行できません。

どうして?エラーを単純に抑制し、IEを開いてそのURLを取得するように要求しました。ただし、Seleniumはブラウザのズームが100%(デフォルト)の場合にのみ要素を識別します。

方法2堅牢で完全な証明方法:

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();

capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);

System.setProperty("webdriver.ie.driver","D:\\IEDriverServer_Win32_2.33.0\\IEDriverServer.exe");

WebDriver driver= new InternetExplorerDriver(capabilities);

driver.get(baseURl);

driver.findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL,"0"));
//This is to set the zoom to default value
//Identify your elements and go ahead testing...

お役に立てれば。さらに情報が必要な場合はお知らせください。

2
NiNa

Robotクラスを使用するとうまくいきました:

for(int i=0; i<3; i++){
        Robot robot = new Robot();
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_MINUS);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_MINUS);
        }

これは3回ズームアウトします。

0
Himank Shekher

ズームアウトとズームインには「Keys.chord」メソッドを使用できます

ズームアウトする

       WebElement zoomPage = driver.findElement(By.tagName("html"));
       zoomPage.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD))

作業が完了し、ブラウザを100%にリセットする場合は、以下のコードを使用します。要素をクリックする場合は、クリックイベントの前に、クリックした後、ブラウザウィンドウを100%にリセットします。

 zoomPage.sendKeys(Keys.chord(Keys.CONTROL, "0"));

ユーザーはJava Zoom Outのスクリプトコードも使用できます

 JavascriptExecutor executor = (JavascriptExecutor)driver;
 executor.executeScript("document.body.style.zoom = '110%'");
0
Ankit jain

C#に提案されたアプローチはもう機能しないようです。

WebDriverバージョン2.5で機能するC#のアプローチ:

        public void ZoomIn()
        {
             new Actions(Driver)
                .SendKeys(Keys.Control).SendKeys(Keys.Add)
                .Perform();
        }

        public void ZoomOut()
        {
            new Actions(Driver)
               .SendKeys(Keys.Control).SendKeys(Keys.Subtract)
               .Perform();
        }
0
Denis Koreyba

私はこれが遅いことを知っていますが、アクションクラスを使用したくない場合(または私がしたようにエラーを取得したい場合)、純粋なJavaScriptを使用してそうすることができます。

ここにコードがあります

((IJavaScriptExecutor) Browser.Driver).ExecuteScript("document.body.style.zoom = '70%';");
0
Right QA

私はPython 3.5。を使用しています。;あなたと同じ問題が発生しました。ブラウザとしてChromeを使用する必要があると思いました。

PhantomJsを使用して、最終的にこの問題を解決しました。

from Selenium.webdriver.common.keys import Keys
from Selenium import webdriver
browser = webdriver.PhantomJS()
browser.get('http://www.*.com')
print(browser.title)
c=browser.find_element_by_tag_name("body")
c.send_keys(Keys.LEFT_CONTROL+Keys.Add)`
0
thonner

2017年11月17日更新

var html = page.FindElement(By.XPath("/html"));
html.SendKeys(Keys.Control + "0" + Keys.Control);
0
roncansan

30%へのズームイン(または、私の場合は30%)を使用します

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.body.style.zoom = '30%';");