Webdriver :Element 在点 (119, 9) 处不可点击。其他元素会收到点击
Posted
技术标签:
【中文标题】Webdriver :Element 在点 (119, 9) 处不可点击。其他元素会收到点击【英文标题】:Webdriver :Element is not clickable at point (119, 9). Other element would receive the click 【发布时间】:2016-12-23 03:15:54 【问题描述】:场景:
登录www.flipkart.com,登录成功后在“电子”中选择“三星”。 现在,我需要滚动到页面底部并从左侧,我需要单击可用性以选择“排除缺货选项”,但是 单击可用性时,我收到消息
失败:Test_Samsung org.openqa.selenium.WebDriverException:元素在点 (119, 9) 处不可点击。其他元素会收到点击:
<div class="_1H5F__" data-reactid="10"></div>
命令持续时间或超时:133 毫秒
//class for successful flipkart login
public class Flipkart_Login
@FindBy(xpath="//a[text()='Log In']") WebElement Login_Click;
@FindBy(xpath="//input[@class='_2zrpKA' and @type='text']") WebElement Enter_Email;
@FindBy(xpath="//input[@class='_2zrpKA _3v41xv' and @type='password']") WebElement Enter_Pass;
@FindBy(xpath="//button[@type='submit' and @class='_3zLR9i _1LctnI _36SmAs']") WebElement Login_Button;
@FindBy(xpath="//span[text()='Please enter valid Email ID/Mobile number']") WebElement Blank_Email;
@FindBy(xpath="//span[text()='Please enter Password']") WebElement Blank_Pass;
public void Valid_Login()
Login_Click.click();
Enter_Email.sendKeys("abc@gmail.com");
Enter_Pass.sendKeys("abcde");
Login_Button.click();
//class for choosing Samsung from Electronics menu and clicking Availability
public class Flipkart_Electronics_Samsung_Mobile
@CacheLookup
@FindBy(xpath="//a[@title='Electronics']//span[text()='Electronics']") WebElement Electronics_Menu;
@CacheLookup
@FindBy(xpath="//a[@title='Samsung']//span[text()='Samsung']") WebElement Samsung_Mobile_Click;
@CacheLookup
@FindBy(xpath="//div[@class='_3QT2gR _1AgMas']//div[text()='Availability']") WebElement Availability;
@CacheLookup
@FindBy(xpath="//div[@class='_1p7h2j']") WebElement Exclude_Out_Of_Stock;
public void Choose_Samsung_Mobile()
WebDriverWait wait = new WebDriverWait(driver, 30);
Actions act = new Actions(driver);
act.moveToElement(Electronics_Menu).perform();
act.click(wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[@title='Samsung']//span[text()='Samsung']")))).build().perform();
WebElement Availability = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='_3QT2gR _1AgMas']//div[text()='Availability']")));
javascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].scrollIntoView(true);", Availability);
Availability.click();
//class which calls the methods from above two classes
public class Flipkart_Electronics_Samsung_Search
WebDriver driver;
@Test
public void Test_Samsung()
driver = BrowserFactory.getBrowser("Firefox");
driver.get(DataProviderFactory.getConfig().getURL());
Flipkart_Login login = PageFactory.initElements(driver, Flipkart_Login.class);
login.Valid_Login();
Flipkart_Electronics_Samsung_Mobile Samsung = PageFactory.initElements(driver, Flipkart_Electronics_Samsung_Mobile.class);
Samsung.Choose_Samsung_Mobile();
【问题讨论】:
【参考方案1】:你可以尝试使用JavascriptExecutor
点击所以你应该替换下面的行:-
js.executeScript("arguments[0].scrollIntoView(true);", Availability);
Availability.click();
到
js.executeScript("arguments[0].click()", Availability);
【讨论】:
【参考方案2】:元素在点 (119, 9) 处不可点击。其他元素会收到点击:命令持续时间或超时:133 毫秒
它清楚地表明,在这种情况下,我们要点击的元素被其他元素 div 隐藏,它会接收点击。
我认为这是不应该隐藏元素的 UI 的问题,但您可以尝试一些事情: 1.通过webdriver最大化浏览器窗口,查看元素是否仍然隐藏
driver.manage().window().maximize()
使用JavaScript点击元素
WebElement element = driver.findElement(By.<locator>);
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click()", element)
【讨论】:
以上是关于Webdriver :Element 在点 (119, 9) 处不可点击。其他元素会收到点击的主要内容,如果未能解决你的问题,请参考以下文章
vue+elementUi在点js.js文件中使用Message消息提示NotificationMessageBoxsuccesimportfrom