我想点击< a> < div>内的元素.
这是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"));
(然后点击)
我得到错误:
An unhandled exception of type ‘OpenQA.Selenium.InvalidSelectorException’ occurred in WebDriver.dll
Additional information: The given selector cart__checkout cart__checkout–small is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError: Compound class names not permitted
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下面
错误:
An unhandled exception of type ‘OpenQA.Selenium.ElementNotVisibleException’ occurred in WebDriver.dll
Additional information: Element is not currently visible and so may not be interacted with
谢谢你的帮忙.我认为我的第二个选择是最好的选择.有没有办法抵消Click()?谢谢.
解决方法:
我已经能够获得该按钮并使用以下XPATH单击它:
//*[@id = 'cart-form']//a[@title = 'Checkout']
所以在C#中你会这样做:
var checkoutButton = driver.FindElement(By.XPath("//*[@id = 'cart-form']//a[@title = 'Checkout']"))
如果你想更好地理解它,我可以为你分解XPATH.