Selenium c# click exacly span 1 by xpath



我只想点击 exacly span 1

示例让我们转到 youtube.com,然后在搜索器中写一些东西,最后单击第一个跨度,如下所示:

driver.Navigate().GoToUrl("https://youtube.com");
driver.FindElement(By.XPath("//*[@id='search']")).SendKeys("I should be so lucky");
driver.FindElement(By.XPath("//*[@id='search']")).SendKeys(Keys.Return);

现在我想点击第一个链接,但这条路径:

//*[@id="description-text"]/span

向我们展示 19 链接 .如何写跨度 1? 我尝试这样的事情

//*[@id="description-text"]/span[1]

但这行不通。 有些人可以通过更改此 xpath 来准确选择仅 1 个跨度吗?

试试这个
(//[@id="description-text"]/span)[1]

引用 :XPath 查询以获取元素的第 n 个实例

希望这有帮助

我会将所有项目存储在列表中并迭代,如下所示:

List<WebElement> listItems = driver.findElements(By.id("description-text"));

比 您可以执行以下操作,或为每个循环迭代所有项目:

for (WebElement element :listItems) {
//... do whatever You need to do with element
element.findElements(By.tagName("span")); // so this is Your span, or all spans 
}

或选择特定元素:

WebElement element = listItems.get(0).findElements(By.tagName("span"));
System.out.println(element.getText());

试试这个Xpath

//h3[contains(@class,'ytd-video-renderer')]/a[contains(@aria-label,'Kylie Minogue - I Should Be So Lucky by HCAESAR 10 years ago ')]  

您可以使用此代码:

driver = new ChromeDriver();
wait =new WebDriverWait(driver, 10);
driver.manage().window().maximize();
driver.get("https://www.youtube.com/");
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("div[id='search-input']>input")));
driver.findElement(By.cssSelector("div[id='search-input']>input")).sendKeys("I should be so lucky"+Keys.RETURN);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("primary")));
WebElement links =  wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//h3[contains(@class,'ytd-video-renderer')]/a[contains(@aria-label,'Kylie Minogue - I Should Be So Lucky by HCAESAR 10 years ago ')]")));
links.click();

最新更新