我正在学习自动化,这是我的第二个脚本..我想做一些非常非常简单的事情,请转到https://demoqa.com/单击“小部件”,然后单击“滑块”,但我尝试了所有元素,但它不起作用...我无法尝试使用 Select,因为我有 ul il 但没有值。 我也尝试过使用不可见的页脚元素,但它也不起作用..这是我的代码...(记住我在这方面真的很新..)我将我尝试过的所有方式都留下了评论
package paginas;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Slider {
//Identify all elements to use
//Poblem: Unable to locate the element
//@FindBy(className="btn btn-light active")
//Problem: element not interactable
//@FindBy(id="item-3")
//Problem (abs xpath):element click intercepted: Element <li class="btn btn-light " id="item-3">...</li>
//is not clickable at point (177, 621). Other element would receive the click: <footer>...</footer>
//@FindBy(xpath="/html[1]/body[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[4]/div[1]/ul[1]/li[4]")
//Problem (Rel xpath: element click intercepted: Element <li class="btn btn-light " id="item-3">...</li>
//is not clickable at point (177, 621). Other element would receive the click: <footer>...</footer>)
@FindBy(xpath="//div[4]//div[1]//ul[1]//li[4]")
WebElement slider;
WebDriver driver;
public Slider(WebDriver driver) {
this.driver = driver;
//Inicializacion de los elementos con una espera impicita
PageFactory.initElements(new AjaxElementLocatorFactory(driver,20), this);
}
public void clickonSlider()
{ // 4 | click | css=.show #item-3 > .text |
// Hace click en Sliders
// //driver.findElement(By.cssSelector(".show #item-3 > .text")).click();
slider.click();
}
}
该元素尚不可见,这就是您收到
not interactable
错误的原因,而且 className 方法不匹配多个类。
解决方案
通过 xpath 找到该元素,然后使用
JavascriptExecutor
组件在可以单击后滚动到该元素。
WebElement slider = driver.findElement(By.xpath("//span[text()=\"Slider\"]"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", slider);
slider.click();
您还可以使用注解@FindBy来切换本地声明
@FindBy(xpath="//span[text()=\"Slider\"]"
WebElement slider;
在像 Tampermonkey 这样的 chrome 插件中模拟情况。