Радиокнопка не выбирается с этим HTML-кодом для этого. Как это сделать? - PullRequest
1 голос
/ 05 ноября 2019
<input id="radio2" name="radioGroup" type="radio">
<label class="flRight" for="radio2">
  ::before
  "Senior Citizen"
  ::after
</label>
WebElement senior = driver.findElement(By.id("radio2"));
      senior.click();

Теперь проблема в том, что код не может щелкнуть по нужному элементу.

Ответы [ 4 ]

1 голос
/ 05 ноября 2019

Попробуйте с этим:

WebElement senior = driver.findElement(By.xpath(".//div[@class='radioBtn']/label[2]"));
    WebElement close = driver.findElement(By.xpath(".//div[@id='nvpush_cross']"));
    WebDriverWait wait = new WebDriverWait(driver, 20);
    wait.until(ExpectedConditions.visibilityOf(close));
    close.click();
    senior.click();

Код не работал раньше, потому что есть всплывающее окно, вам нужно закрыть его.

1 голос
/ 05 ноября 2019

Вам нужно вызвать WebdriverWait. И чтобы включить переключатель, используйте JavaScript Executor, так как ни webdriver щелчок, ни класс действия не работают

WebDriverWait wait = new WebDriverWait(driver, 20); 
WebElement item=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@class='flRight' and @for='radio2']")));
JavascriptExecutor js= (JavascriptExecutor) driver; 
js.executeScript("arguments[0].click();", item);
1 голос
/ 05 ноября 2019

Использовать WebDriverWait:

WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement senior = wait.until(ExpectedConditions.elementToBeClickable(By.id("radio2")));
senior.click();

После просмотра веб-сайта выглядит, что input это не тот элемент, который вы хотите щелкнуть, а label ...

Так что простоизмените senior var на:

WebElement senior = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='RadioButton']//label[@for='radio2']")));

. Лучший способ автоматизировать действия человека в случае, когда элемент не реагирует на росу по отношению к другим элементам, покрывающим их, - это использовать Actions:

WebElement senior = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='RadioButton']//label[@for='radio2']")));
Actions actions = new Actions(driver);
actions.moveToElement(senior).click().build().perform();  

(использование JavascriptExecutor и executeScript не действительно щелчок ... он просто вызывает метод, который может быть хорошим, но не для тестирования ...)

В крайнем случае используйте JavascriptExecutor:

JavascriptExecutor jse= (JavascriptExecutor) driver; 
jse.executeScript("arguments[0].click();", senior);
0 голосов
/ 05 ноября 2019

Пожалуйста, попробуйте следующее решение:

  WebDriverWait wait = new WebDriverWait(driver, 10);
  WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@class='flRight' and @for='radio2']")));

  Actions action=new Actions(driver);
  action.moveToElement(element).click().perform();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...