如何单击HTML表日历中的内部元素

时间:2017-10-02 08:18:14

标签: c# selenium selenium-webdriver

我使用的是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>

enter image description here

1 个答案:

答案 0 :(得分:-1)

看起来你一直试图点击TR而不是TD。我会尝试XPath

//div[@id='selectYear']//td[.='-']

您可能还需要等待元素可见/可点击。您可以添加类似

的内容
new WebDriverWait(Driver, TimeSpan.FromSeconds(5)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div[@id='selectYear']//td[.='-']")));