Нажатие на кнопку, найденную с xpath, работающим в Chrome, но не в IE11 - PullRequest
0 голосов
/ 22 января 2020

Я хочу нажать кнопку (чтобы отправить форму)

<button class="form-button primary">Click here</button>

Я нахожу такой элемент:

driver.findElement(By.xpath("//button[contains(text(),'Click here')]")).click;

На chorme работает и отправки формы, но в IE11 нет (отправка формы). Чтобы было понятно, в IE находится элемент (или элемент). Но, вероятно, это не правильный элемент.

Информация о добавлении:

  • Это единственная кнопка с этим текстом

  • Я, вероятно, могу найти другие способы получить это элемент, но если я переделываю этот путь, мне нужно будет изменить все пути, подобные этому.

Версия Selenium: 3.14 IE webdriver: 3.14

Ответы [ 2 ]

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

Существует несколько различных способов нажатия на что-либо с использованием селена. Я бы попробовал использовать либо javascript клик, либо действие клик.

Javascript клик:

WebElement element = driver.findElement(By.xpath("//button[contains(text(),'Click here')]"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

Действие клик:

Actions action = new Actions(driver);
WebElement element = driver.findElement(By.xpath("//button[contains(text(),'Click here')]"));
action.moveToElement(element).click().build().perform();

Это также возможно что вы находитесь не в том кадре во время выполнения клика.

driver.switchTo.frame("Frame_ID");

Вы сможете найти идентификатор кадра при просмотре веб-страницы.

1 голос
/ 22 января 2020

Если ваш вариант использования должен вызывать click(), вы должны вызвать WebDriverWait для elementToBeClickable(), и вы можете использовать любую из следующих Стратегий локатора :

  • xpath с использованием className и text :

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='form-button primary' and text()='Click here']"))).click();
    
  • xpath с использованием текста :

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[text()='Click here']"))).click();
    
  • xpath с использованием contains():

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[contains(., 'Click here')]"))).click();
    
...