#java #selenium #selenium-webdriver #while-loop #automated-tests
#java #селен #selenium-webdriver #цикл while #автоматизированные тесты
Вопрос:
У меня есть одна кнопка, которая иногда не выполняет фактический щелчок, из-за этого я написал код для ее обработки с помощью цикла while, где он будет щелкать, пока не обнаружит новое назначение заголовка страницы. Но это работает не так, как ожидалось. Пожалуйста, помогите мне, заранее спасибо.
String titleWhenLoad = driver.findElement(By.xpath("//span[@class='assignment_title']")).getText();
String titleNext = titleWhenLoad;
while ((titleWhenLoad.equals(titleNext))
amp;amp; (driver.findElement(By.xpath("//span[@class='assignment_title']")).isDisplayed())) {
WebElement btn = driver.findElement(By.xpath("//button[contains(text(),'Submit')]"))
btn.click();
if (driver.findElement(By.xpath("//span[@class='assignment_title']")).isDisplayed()) {
titleNext = driver.findElement(By.xpath("//span[@class='assignment_title']")).getText();
} else {
break;
}
}
Комментарии:
1. я настоятельно рекомендую использовать waits ( selenium-python.readthedocs.io/waits.html ) вместо того, чтобы использовать цикл. Это будет повторяться тысячи раз в секунду, что неэффективно
2. @SamridhTuladhar Я пытался их использовать, но иногда кнопка на самом деле не нажимается. Даже я пробовал с Java script, он не работает ни в том, ни в другом случае. Эта кнопка распространена во всем приложении, и из-за этого мои скрипты терпят неудачу.
3. @frainH ответил ниже, объединив оба цикла и ожидание. Поскольку цикл выполняется только один раз в 3 секунды, все должно быть в порядке.
Ответ №1:
Вы можете WebDriverWait
использовать .invisibilityOfElementWithText
using, чтобы дождаться исчезновения элемента с определенным текстом.
Чтобы нажать на цель кнопки, я предлагаю использовать Actions
class .
Проверьте это:
String titleWhenLoad = driver.findElement(By.xpath("//span[@class='assignment_title']")).getText();
boolean findNewTitle = false;
while (!findNewTitle) {
try {
new WebDriverWait(driver, 3).until(ExpectedConditions.invisibilityOfElementWithText(By.xpath("//span[@class='assignment_title']"), titleWhenLoad));
findNewTitle = true;
} catch (Exception e) {
WebElement btn = driver.findElement(By.xpath("//button[contains(text(),'Submit')]"));
Actions builder = new Actions(driver);
builder.moveToElement(btn).click(btn).build().perform();
}
}
Импортируйте следующее:
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.interactions.Actions;
Ссылка:
https://www.selenium.dev/documentation/en/webdriver/waits/#expected-conditions
Комментарии:
1. Это работает как шарм. Вы сэкономили мое время. Большое вам спасибо.
2. @cindy87 Добро пожаловать, рад это слышать.