如何修复“元素当前不可见”硒& lt; a>元素
本文关键字:元素 lt 何修复 | 更新日期: 2023-09-27 18:13:07
我试图点击<div>
内部的<a>
元素。这里是html:
<div class="cart__checkout cart__checkout--small">
<a class="button button--lg button--info button--checkout" title = "Checkout" href = "https://shop.adidas.ae/en/checkout/onepage/">
<span> Checkout </span>
<i class="icon-sprite icon-sprite-arrow-white-right-type-4"></i>
</a>
</div>
<button id="update_cart_action" class = "button btn-update" style = "display: none;" type = "submit" name = "update_cart_action" value = "update_qty" title = "Update Shopping Cart"></button>
如果你想看到原始网站的https://shop.adidas.ae/en/checkout/cart/(你将不得不添加一些东西到你的购物车看到我所看到的)
我试过三种不同的方法:
第一种方法,我的目标是div
:
var checkoutButton = driver.FindElement(By.ClassName("cart__checkout cart__checkout--small"));
(点击)
得到错误:
为了解决复合类名错误,我尝试了以下代码:类型为"OpenQA.Selenium"的未处理异常。在WebDriver.dll中发生InvalidSelectorException'附加信息:给定的选择器cart__checkout cart__checkout——small要么无效,要么不会产生WebElement。出现以下错误:InvalidSelectorError:复合类名不允许
var checkoutButton = driver.FindElement(By.CssSelector("div[class*= 'cart__checkout cart__checkout--small']"));
什么都没有发生,我假设它被点击了,但不是实际的链接被点击(第二个选项)。
我认为这可能是一个有效的方式来点击实际的元素,除了div实际上比链接大得多。我假设selenium在div的中心单击,但是从下面的屏幕截图中可以看到,div的中心没有链接。是否有任何方法来抵消我的Click()
功能?
或者,我试着瞄准a
:
var checkoutButton = driver.FindElement(By.CssSelector("a[class*='button button--lg button--info button--checkout']"));
这只会给出它不在当前视图中的错误,很可能是因为a
在div
错误:
类型为"OpenQA.Selenium"的未处理异常。在WebDriver.dll中发生了ElementNotVisibleException附加信息:元素当前不可见,因此可能无法与
交互。
谢谢你的帮助。我认为我的第二个选择是最好的选择。有没有办法抵消Click()
?谢谢。
您的CSS选择器有点关闭。注意两个类之间的"。"。此外,您可以专门针对a。试试这个:
var checkoutButton = driver.FindElement(By.CssSelector("div.cart__checkout.cart__checkout--small a"));
也许你可以使用:
ILocatable hoverItem = (ILocatable)driver.FindElement(By.XPath("//*[@id='js-minicart']"));
IMouse mouse = ((IHasInputDevices)driver).Mouse;
mouse.MouseMove(hoverItem.Coordinates);
检查<a>
元素后:
driver.FindElement(By.Xpath('//*[@id="js-minicart"]/li/div[2]/div[3]/div[4]/ul/li/a/span'));
您应该尝试使用WebDriverWait
等待,直到元素可见,并启用与ExpectedConditions.ElementToBeClickable
单击,然后进行交互,如下所示:-
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement checkOut = wait.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("a.button--checkout[title ='Checkout']")));
checkOut.Click();
我已经能够获得该按钮并使用以下XPATH单击它:
//*[@id = 'cart-form']//a[@title = 'Checkout']
在c#中你可以这样做:
var checkoutButton = driver.FindElement(By.XPath("//*[@id = 'cart-form']//a[@title = 'Checkout']"))
如果您想更好地理解XPATH,我可以为您详细说明。