Поиск элемента по CSS с помощью Selenium - PullRequest
0 голосов
/ 15 января 2020

У меня есть следующий элемент на моей веб-странице:

<button id="btnPackageDownloadtopPackageTable1dde0fcb2-948b-4bbc-b347-40deb2f6034e"
 title="Download package" ng-style="{'display': ''}" 
 ng-show="!PackageManagementCtrl.downloadStartedForPackage['topPackageTable1dde0fcb2-948b-4bbc-b347-40deb2f6034e']" 
 phd="{&quot;action&quot;: &quot;enable&quot;, &quot;code&quot;: 3002}"
 phd-unit="Bank(Y)" class="btn action-btn" style="margin-left: 5px;" type="button" 
 ng-click="PackageManagementCtrl.downloadPackage('dde0fcb2-948b-4bbc-b347-40deb2f6034e',
 'Pack_110','topPackageTable1dde0fcb2-948b-4bbc-b347-40deb2f6034e')">
<i class="fa fa-download"></i>  Download</button>

Это выражение CSS, которое я передаю своему коду Selenium:

[phd-unit = ' Банк (Y) '] [ng-click * =' Pack_110 '] [ng-click * =' downloadPackage ']

Мой код:

 @Test
public void findElementByCss() {

    softAsserter = new SoftAsserter(testParameters);
    String CssExpresion = testParameters.get("actionData");

    WebElement optionToFind = null;
    try {
        WebDriverWait wait = new WebDriverWait(browser, 5);
        optionToFind = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(CssExpresion)));
    }
    catch (Exception ex){
        softAsserter.fail(ex.getMessage());
    }
    if (optionToFind==null) {
        softAsserter.fail("failed to failed element with expression: " + CssExpresion);
    }
    if (optionToFind!=null) {
        softAsserter.assertTrue(true, "Element found by attributes: </br>" + CssExpresion);
    }
    if (softAsserter.isOneFailed()) {
        asserter.fail("findElementByCss failed");
    }
}

Почему мой код не удается найти этот конкретный c элемент?

Ответы [ 2 ]

2 голосов
/ 15 января 2020

Я бы предложил использовать следующий селектор css.

button.btn.action-btn[title='Download package']

ИЛИ

button.btn.action-btn[title='Download package'][phd-unit='Bank(Y)']
0 голосов
/ 15 января 2020

Проблема заключалась в следующем:

ExpectedConditions.visibilityOfElementLocated

изменил его на:

ExpectedConditions.presenceOfElementLocated

И он работает как шарм

...