我正在尝试在linkedin(https://www.linkedin.com/learning/me?trk=nav_neptune_learning)的学习搜索字段中进行搜索
硒与Java:
driver.findElement(By.xpath("//div[@class='search-container']/descendant::input[@type='text']")).sendKeys("Python");
到步骤3为止,它都起作用,突出显示搜索字段。
最后一步总是失败,只有以下例外
org.openqa.selenium.NoSuchElementException:无法找到元素:
我尝试了以下xpath:
//div[@class='container global-nav__container']//div[@class='search-container']/artdeco-typeahead[@id='ember863']/div/input[@type='text']
//div[@class='search-container']/descendant::input[@type='text']
//div[@class='search-container']/artdeco-typeahead[@id='ember863']/div/input[@type='text']
//div[@class='search-container']/artdeco-typeahead/div/input[@type='text']
上面所有的xpath都有意思,我可以在浏览器中找到该元素,但是相同的xapth在硒代码中不起作用。
我的代码-步骤4
@Test
public static void search() throws InterruptedException, AWTException
{
Robot robot = new Robot();
for ( int i=0; i<=5;i++)
{
robot.keyPress(KeyEvent.VK_TAB);
Thread.sleep(2000);
}
driver.findElement(By.xpath("//input[@type='text']")).sendKeys("Python");
}
答案 0 :(得分:1)
NoSuchElementException
通常在两种情况下发生。
之所以收到“ NoSuchElementException”,是因为甚至在页面上的Webelement完全加载之前就已经输入了文本。
我建议您等到要查找的Web元素首先被加载,然后再使用sendkeys。使用可以使用WebDriverWait
类
所以重构后的代码应该看起来像这样。
//Initializing the 'wait' with a 30 seconds deplay before it throws a NoSuchElementException
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("input[placeholder='Search for skills, subjects or software']"));
driver.findElement(By.cssSelector("input[placeholder='Search for skills, subjects or software']")).sendKeys("Python");
答案 1 :(得分:0)
以下代码将为您工作:
driver.findElement(By.cssSelector("input[placeholder='Search for skills, subjects or software']")).sendKeys("Python");