Selenium, Firefox и geckodriver не выполняют автоматическую прокрутку для метода щелчка - PullRequest
0 голосов
/ 13 декабря 2018

Я использую Selenium, Maven, TestNG и Java для запуска автоматических тестов в Firefox.Ранее я использовал Firefox v52, gauva v21, testng v6.9.10, selenium-java v3.4.0 и commons.io v2.1 (из pom.xml).Я обновил до Firefox v60, что означает обновление всех зависимостей.У меня проблема в том, что когда я запускаю одни и те же тесты (независимо от тестов), они терпят неудачу, потому что элемент не переносится в область просмотра, что было сделано по умолчанию в Firefox v52.Я могу взаимодействовать с элементом, например получать текст или размер всех элементов на странице, но не могу щелкнуть.Вот ссылка на то, что происходит https://www.hskupin.info/2017/12/15/element-interactability-checks-with-geckodriver-and-firefox-58/. Я попытался обновить moz: webdriverClick, но я предполагаю, что это доступно только для Firefox v58 (возможно, v59).

Вот зависимости в моем обновленном pom.xml

<dependency>
    <groupId>com.google.com</groupId>
    <artifactId>guava</artifactId>
    <version>23.6-jre</version>
</dependency>

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.9.10</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>com.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.11.0</version>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons.io</artifactId>
    <version>2.1</version>
</dependency>

мой java-файл

public class Assassinate {

protected WebDriver driver;

public WebDriver getDriver() {
    return driver;
}

@BeforeMethod(alwaysRun = true)
public void beforeMethod() throws Exception {
    String customProfile = System.getProperty("customFirefoxProfile");
    FirefoxProfile profile = new FirefoxProfile(new File(customProfile));

    FirefoxOptions fo = new FirefoxOptions();
    System.setProperty("webdriver.gecko.driver", "resources/geckodriver");
    fo.setAcceptInsecureCerts(true);
    fo.setProfile(profile);
    driver = new FirefoxDriver(fo);
    driver.manage()timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}

@AfterMethod(alwaysRun = true)
public void tearDown() throws Exception {
    getDriver().quit();
    TemporaryFilesystem.getDefaultTmpFS().deleteTemporaryFiles();
}

@Test (groups = {"test"})
public void firstTest () {
    getDriver().get("someurl");
    getDriver().findElement(By.id("id")).click();
}

}

Я удалил DesiredCapabilities и обновился до параметров Firefox.Я также добавил путь к геккодриверу.Это приводит меня к открытию URL-адреса, и я получаю успех, но он не будет щелкать по элементу, потому что он вне поля зрения.Если я выберу элемент, который отображается, я могу щелкнуть по нему хорошо.В конечном итоге я хотел бы проводить свои тесты без головы, что я могу сделать, но эта проблема останавливает все.Кто-нибудь еще мог обойти это или найти решение?Я не получаю никаких ошибок, так что никакой помощи там нет.ТИА.

1 Ответ

0 голосов
/ 14 декабря 2018

guava-23.6-jre

Если вы используете следующую Selenium maven зависимость:

<dependency>
    <groupId>com.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.11.0</version>
</dependency>

Вам явно не нужно использовать следующее гуава зависимость maven:

<dependency>
    <groupId>com.google.com</groupId>
    <artifactId>guava</artifactId>
    <version>23.6-jre</version>
</dependency>

As selenium-java-3.11.0 содержит guava-23,6-jre

guava_jar


автопрокрутка для click()

Чтобы вызвать click() для элемента, автопрокрутка делаетпроисходит, только если требуемый элемент видим в DOM Tree .

Соответствующий HTML DOM дал бы нам некоторое представление о том, является ли требуемыйэлемент был виден в HTML DOM или нет.Однако, согласно рекомендациям при открытии новой страницы, перед тем, как щелкнуть элемент, вызовите WebDriverwait , чтобы требуемый элемент был кликабельным , и вы можете использовать следующее решение:

@Test (groups = {"test"})
public void firstTest () {
    getDriver().get("someurl");
    new WebDriverWait(getDriver(), 20).until(ExpectedConditions.elementToBeClickable(By.id("id"))).click();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...