Как выбрать элемент ниже в Selenium Java Web Driver? - PullRequest
0 голосов
/ 11 июля 2019

Ну, у меня есть ниже код

<button class="jobs-search-box__submit-button artdeco-button artdeco-button--3 ml2" data-ember-action="" data-ember-action-689="689">Search</button>

Я хочу найти этот элемент в селене и выполнить действие щелчка. Я пробовал несколько вариантов, таких как класс, xpath, имя, текст, содержит, но ничего не получалось. Кто-нибудь может направить меня сюда?

driver.findElement(By.xpath("//button[contains(.,'Search']")).click();
driver.findElement(By.className("jobs-search-box__submit-button artdeco-button artdeco-button--3 ml2")).click();
driver.findElement(By.className("//*[@id=\"ember689\"]/button")).click();
driver.findElement(By.linkText("Search")).click();

Ответы [ 4 ]

0 голосов
/ 17 июля 2019

Попробуйте с этими двумя надеюсь, что это работает,

1.) Использование содержит

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[contains(text(),'Search')]")));

2.) Использование CSS

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.jobs-search-box__submit-button artdeco-button artdeco-button--3 ml2")));

WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.contains('Search')")));

Если не работает, дайте мне знать, я предоставлю другое решение.

0 голосов
/ 11 июля 2019

Вы можете достичь того же, используя JavaScript. пожалуйста, найдите приведенный ниже пример кода:

//Creating the JavascriptExecutor interface object by Typecasting       
JavascriptExecutor js = (JavascriptExecutor)driver;

WebElement button =driver.findElement(By.xpath("//button[@class='jobs-search-box__submit-button artdeco-button artdeco-button--3 ml2']"));

//Perform Click on LOGIN button using JavascriptExecutor        
js.executeScript("arguments[0].click();", button);

Надеюсь, это сработает в вашем случае.

Примечание: Убедитесь, что ваш элемент будет статичным.

0 голосов
/ 11 июля 2019

Правильный локатор XPath будет выглядеть так:

//button[text()='Search']

Если вы не сможете найти его с помощью приведенного выше запроса, убедитесь, что:

  1. Кнопка нене принадлежат и <iframe>, если это так - вам придется изменить контекст с помощью функции switchTo ()
  2. Элементприсутствует в DOM, то есть страница была загружена полностью.Лучше использовать Явное ожидание для определения местоположения / взаимодействия элемента, например:

    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[text()='Search']")));
    

Дополнительная информация: Как использовать Selenium для тестирования веб-приложений с использованием AJAXтехнология

0 голосов
/ 11 июля 2019

Подведем итоги, что было в комментариях.У каждого локатора было что-то не так.

By.xpath("//button[contains(.,'Search']")

пропускала скобки и должна была быть:

By.xpath("//button[contains(.,'Search')]")

Между тем, поскольку By.className ожидает одно имя-класса

By.className("jobs-search-box__submit-button artdeco-button artdeco-button--3 ml2")

тоже не работает.(см. github.com / seleniumhq / selenium / Issues / 1480 , но может быть:

By.cssSelector(".jobs-search-box__submit-button.artdeco-button.artdeco-button--3.ml2") 

Также

By.className("//*[@id=\"ember689\"]/button")

относится к идентификатору, не представленному (также, Я не уверен, но я думаю, что должно быть по xpath).

By.linkText("Search")

не работает, потому что нет тега a и, следовательно, нет гиперссылки.

InТранспортир, это намного проще, потому что вы бы просто сказали by.buttonText('Search')

...