Невозможно выбрать переключатель, используя селен Java - PullRequest
0 голосов
/ 09 мая 2018

Я хочу выбрать переключатель с помощью селена веб-драйвера. Мой код

<div class="radio-switch-group" aria-label="RequestForCheckBox" role="menu">
<label>
    <input type="radio" name="request_for" value="self" ng-model="data.form.requestFor" class="ng-pristine ng-untouched ng-valid">
    <span class="radio-label" translate=""><span class="ng-scope">Self</span></span>
</label>
<label>
    <input type="radio" name="request_for" value="other" data-ng-click="$scope.getDataHandler()" ng-model="data.form.requestFor" class="ng-pristine ng-untouched ng-valid">
    <span class="radio-label" translate=""><span class="ng-scope">Others</span></span>
</label>
</div>

Я попытался найти элемент с кодом, показанным ниже

WebElement other = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"make-request-form\"]/div/section/div[2]/div/form/div[1]/div/div/div/label[2]/input")));
other.click();

Но становится ниже

 Exception in thread "main" org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of element located by By.xpath: //*[@id="make-request-form"]/div/section/div[2]/div/form/div[1]/div/div/div/label[2]/input (tried for 20 second(s) with 500 milliseconds interval)
Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:33:08.638Z'
System info: host: 'AUUR01VP1341', ip: '10.97.2.56', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_171'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptSslCerts: true, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 2.34.522940 (1a76f96f66e3ca..., userDataDir: C:\Users\L100455\AppData\Lo...}, cssSelectorsEnabled: true, databaseEnabled: false, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, rotatable: false, setWindowRect: true, takesHeapSnapshot: true, takesScreenshot: true, unexpectedAlertBehaviour: , unhandledPromptBehavior: , version: 61.0.3163.100, webStorageEnabled: true}
Session ID: 9d15042c1c2c4eda197796e5fdf42243
    at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:81)
    at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:271)
    at auto.Automation.main(Automation.java:44)

Может кто-нибудь, пожалуйста, помогите мне с этим.

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

В соответствии с HTML , которым вы поделились, и ваш код будет двигаться вперед, когда вы нажмете одну из кнопок радиосвязи вместо ExpectedConditions visibilityOfElementLocated() вам нужно использовать elementToBeClickable() следующим образом:

  • Чтобы щелкнуть радиокнопку , связанную с текстом Self , вы можете использовать следующую строку кода:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='ng-pristine ng-untouched ng-valid' and @value='self']"))).click();
    
  • Чтобы щелкнуть радиокнопку , связанную с текстом Другие , можно использовать следующую строку кода:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='ng-pristine ng-untouched ng-valid' and @value='other']"))).click();
    
0 голосов
/ 09 мая 2018

Попробуйте использовать ExpectedConditions.elementToBeClickable(element) вместо visibilityOfElementLocated()

0 голосов
/ 09 мая 2018

В соответствии с сгенерированным исключением вы работаете в режиме ожидания.

Либо ваш объект не существует после установленного по умолчанию тайм-аута в 20 секунд, либо используемый вами xPath неверен. Вы можете попробовать использовать следующий xPath для выбора второй метки: (//input[@name="request_for"])[2]

Tipp: для быстрого тестирования вставьте ваш HTML-код в генератор xPath (например, https://www.freeformatter.com/xpath-tester.html) и протестируйте выражение xPath без необходимости повторного запуска Selenium.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...