我使用的是selenium web-driver 3.6.0版+ C#。我尝试单击日历以选择不同的日期。日历有一个下拉列表,用于选择年份和月份。当我需要选择年份时,我应该点击当年文本附近的箭头,并从列表中选择其他年份。如果我想要的年份没有出现在列表中,我应该点击" - "(减号)或" +"(加号)并列出清单/ down并显示其他年份。
当我尝试点击列表中的加号或减号时,我收到了MSG:
"元素不可见"
我试图搜索很多关于这个问题,甚至尝试了所有建议的方法,但我无法解决问题。
我详细说明了我的尝试:
1。基本:
BrowserFactory.DriverUser.FindElement(By.XPath("//div[@id='selectYear']//tr[1]")).Click();
结果:元素不可见。
2。点击元素两次:
BrowserFactory.DriverUser.FindElement(By.XPath("//div[@id='selectYear']//tr[1]")).Click();
BrowserFactory.DriverUser.FindElement(By.XPath("//div[@id='selectYear']//tr[1]")).Click();
结果:元素不可见。
3. 最大化浏览器窗口:
driverUser.Manage().Window.Maximize();
结果:元素不可见
4. 点击通过java-script:
IWebElement minusButtonInCalendar = BrowserFactory.DriverUser.FindElement(By.XPath("//div[@id='selectYear']//tr[1]"));
((IJavaScriptExecutor)BrowserFactory.DriverUser ).ExecuteScript("arguments[0].click();" , minusButtonInCalendar);
结果:正在运行并未结束。
5. 滚动查看元素,然后点击:
IWebElement minusButtonInCalendar = BrowserFactory.DriverUser.FindElement(By.XPath("//div[@id='selectYear']//tr[1]"));
((IJavaScriptExecutor)BrowserFactory.DriverUser ).ExecuteScript("arguments[0].scrollIntoView(true);" , minusButtonInCalendar);
BrowserFactory.DriverUser.FindElement(By.XPath("//div[@id='selectYear']//tr[2]")).Click();
结果:运行不会结束
6. 移至元素,然后点击browser.actions():
WebDriverWait wait = new WebDriverWait(BrowserFactory.DriverUser , TimeSpan.FromSeconds(10));
var element = wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//div[@id='selectYear']//tr[1]")));
new Actions(BrowserFactory.DriverUser).MoveToElement(element).Perform();
结果:运行不会结束
注意: 当我在selenium IDE中尝试录制此案例时,它没有记录此操作。
相关的HTML代码是:
<div id="selectYear" style="position: absolute; visibility: hidden; z-index: 100001; top: 26px; left: 143px;">
<table style="font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;" onmouseover="clearTimeout(timeoutID2)" onmouseout="clearTimeout(timeoutID2);timeoutID2=setTimeout(" popDownYear() ",100)" width="44" cellspacing="0" bgcolor="#FFFFDD">
<tbody>
<tr>
<td onmouseover="this.style.backgroundColor=" #FFCC99 "" onmouseout="clearInterval(intervalID1);this.style.backgroundColor=" "" style="cursor: pointer;" onmousedown="clearInterval(intervalID1);intervalID1=setInterval(" decYear() ",30)" onmouseup="clearInterval(intervalID1)" align="center">-</td>
</tr>
</tbody>
</table>
</div>
答案 0 :(得分:-1)
看起来你一直试图点击TR而不是TD。我会尝试XPath
//div[@id='selectYear']//td[.='-']
您可能还需要等待元素可见/可点击。您可以添加类似
的内容new WebDriverWait(Driver, TimeSpan.FromSeconds(5)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div[@id='selectYear']//td[.='-']")));