如何使用SeleniumWebDriver简化以下代码? 离开 城市或机场

如何使用SeleniumWebDriver简化以下代码? 离开 城市或机场,selenium,webdriver,Selenium,Webdriver,我正在尝试使用chrome webdriver和while loop选择以下网站上的“离开”部分之一: 我尝试了以下代码: 包下拉列表; 导入java.util.concurrent.TimeUnit; 导入org.openqa.selenium.By; 导入org.openqa.selenium.Keys; 导入org.openqa.selenium.WebDriver; 导入org.openqa.selenium.WebElement; 导入org.openqa.selenium.chrom

我正在尝试使用chrome webdriver和while loop选择以下网站上的“离开”部分之一:

我尝试了以下代码:

包下拉列表;
导入java.util.concurrent.TimeUnit;
导入org.openqa.selenium.By;
导入org.openqa.selenium.Keys;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.WebElement;
导入org.openqa.selenium.chrome.ChromeDriver;
公共类同步{
公共静态void main(字符串[]args)引发InterruptedException{
System.setProperty(“webdriver.chrome.driver”,
“C:\\Users\\everybody\\Desktop\\selenium\\library\\chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
驱动程序。获取(“https://alaskatrips.poweredbygps.com/g/pt/hotels?MDPCID=ALASKA-美国TPS品牌酒店酒店);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
WebElement a=driver.findElement(By.id(“FH源”);
a、 sendKeys(“新”);
而(!a.equals(“纽黑文,CT(HVN所有机场)”){
//睡眠(4000);
driver.findElement(By.id(“FH原点”)).sendKeys(key.ARROW_DOWN);
driver.findElement(By.id(“FH原点”)).sendKeys(key.ENTER);
}

这就是你要找的吗

while (!a.getText().equals("New Haven, CT (HVN-All Airports)")) {
            Thread.sleep(4000); //what is the need of this Thread sleep?
            driver.findElement(By.id("FH-origin")).sendKeys(Keys.ARROW_DOWN); 
        }
driver.findElement(By.id("FH-origin")).sendKeys(Keys.ENTER);
我只是根据我的假设修改了你的代码

发布HTML将帮助其他用户找到问题的答案

代码简化: 在给定页面中,
输入几个字母后,它将自动完成建议加载到列表中

您必须等待autocomplete下拉列表出现。要做到这一点,请使用显式等待,因为它会等待元素可见,而不是更多

显式等待:

new WebDriverWait(driver,30).until(ExpectedConditions.visibilityOf(autocomplete));
//*[@id='backwards']/li/a[contains(.,'New Haven')]
之后,您必须找到包含“新天堂”的项目并单击它。您可以使用XPath查找包含特定文本的元素

XPath:

new WebDriverWait(driver,30).until(ExpectedConditions.visibilityOf(autocomplete));
//*[@id='backwards']/li/a[contains(.,'New Haven')]
既然已经找到了该项,就不必再运行循环来查找该元素了

试试这个:


driver.get("https://alaskatrips.poweredbygps.com/g/pt/hotels?MDPCID=ALASKA-US.TPS.BRAND.hotels.HOTEL");

WebElement leavingFrom = driver.findElement(By.id("FH-origin"));
WebElement autocomplete = driver.findElement(By.className("autocomplete-dropdown"));

leavingFrom.sendKeys("NEW");
//after entering sample text wait for the autocomplete drop-down to show up 
new WebDriverWait(driver,30).until(ExpectedConditions.visibilityOf(autocomplete));
WebElement newHaevn = driver.findElement(By.xpath("//*[@id='backwards']/li/a[contains(.,'New Haven')]"));
newHaevn.click();

为此,您必须导入

import org.openqa.selenium.support.ui.WebDriverWait;

可能的错误修复: 对于
无法访问的Chrome
异常,可能的解决方案有:

  • 更新
  • 将Chrome更新至最新版本
  • 更新特定chrome版本的
  • 使用
    no沙盒
    chrome选项
ChromeOptions选项=新的ChromeOptions();
options.addArguments(“--no sandbox”);
chromeDriver=新的chromeDriver(选项);
    -
请花一些时间阅读问题。OP提到了…但我一直看到chrome不可访问错误…编辑您的问题并发布相关错误消息,确保您指出出现错误的代码行。从您的帖子中,似乎在第31行引发了异常。请您更新代码到该点,然后重试ost错误堆栈跟踪。当我在NotePad++中粘贴所显示的代码时,只有29行,因此我不知道第31行是什么,除非错误消息指出它可能在不同的类中?我的直觉是,您没有在浏览器实例化中声明或传递ChromeOptions,但如果不知道您的具体位置,很难确认您报告的错误为。请提供其他人反复要求的更多详细信息。