如何从量角器中的随机菜单中获取元素?

时间:2017-08-16 13:05:40

标签: javascript selenium typescript protractor automated-tests

我是新的量角器,打字稿,javascript ..所以,我不知道我到底做错了什么。

webelement只返回一个对象,我无法执行单击链接的操作。 我怎样才能获得linkText?我尝试使用其他形式,如id,css,tagname,但由于某种原因,对象在某些时候会丢失。有人有这种问题吗?

//html (which is inside a frame)

<div class="menuLabel" id="menuLabel1"> </div>
<div class="submenubox" id="submenu1"> </div>


<div class="menuLabel" id="menuLabel2">
  <table>
    <tbody>
      <tr>
        <td> </td>
        <td class="menuText">
          <nobr>
            <a onmouseover="menuShow(event,'2')" href="javascript:void(null)" class="ml">Example Main Menu</a>
          </nobr>
        </td>
      </tr>
    </tbody>
  </table>
</div>

<div class="submenubox" id="submenu2">
  <table border="0" cellpadding="0" cellspacing="0">
    <tbody>
      <tr>
        <td class="anything">
          <table border="0" cellpadding="0" cellspacing="0">
            <tbody>
              <tr>
                <td>
                  <table border="0" cellpadding="0" cellspacing="0">
                    <tbody>
                      <tr> </tr>
                      <tr>
                        <td class="secNav">
                          <a onmouseover="subMenuShow(event, '2', '1')" ; hoverText='Example Sub Menu' target href="trade/new.action">...</a>
                        </td>
                      </tr>
                    </tbody>
                  </table>
                </td>
              </tr>
            </tbody>
          </table>
        </td>
      </tr>
    </tbody>
  </table>
</div>
//Page object file
export class PageObject {
public mainMenuLink: WebElement = element(By.linkText('Example Main Menu'));
public subMenuLink: WebElement = element(By.linkText('Example Sub Menu'));

async gettingMenu(): Promise<void> {

//Mouse over the Main Menu, once this actions is done, a table with submenu appears
await browser.actions().mouseMove(this.mainMenuLink);

//Clicking on the submenu link
await browser.actions().mouseMove(this.subMenuLink);
await browser.actions().click(this.subMenuLink);

    }
}

2 个答案:

答案 0 :(得分:1)

您缺少.perform()调用。来自官方docs

  

使用此驱动程序创建一系列用户操作。在调用webdriver.ActionSequence#perform之前,不会安排执行序列。

尝试:

77.65B 86.73B  92.97B  84.7B   89.4B

答案 1 :(得分:0)

您无需使用鼠标实际转到该元素。

您实际上可以访问该元素。

另外,你按类来冷获取元素(因为它有唯一的类)。

element(by.cssContainingText('.secNav', 'Example Main Menu')).click();

element(by.css('.secNav')).click();

这应该这样做,让我知道它是否有效。