2016-12-30 12 views
2

分度器では、基本的に2つのことを行う便利な方法があります.1つまたは複数の要素をCSSセレクタで探し、要素のテキストに目的の文字列が含まれるようにチェックします。サンプル:by.cssContainingText in Python/Selenium

var elm = element(by.cssContainingText('#myid .myclass', 'Some Text')); 
expect(elm.isDisplayed()).toBe(true); 

これはどのようにしてPython/Seleniumで行うことができますか?

私はテキストをチェックするXPathの方法に注意しています。私は特にCSSセレクタの使用と要素のテキストのチェックに興味があります。

答えて

1

by.cssContainingText implementationを見ると、まず、CSSセレクタですべての要素を見つけて、一致する要素のテキストに目的の文字列が含まれているかどうかを確認します。

当社は、独自のカスタムロケータを作成するために、Pythonで同じロジックを模倣することができます。

def by_css_containing_text(driver, selector, text): 
    elements = driver.find_elements_by_css_selector(selector) 
    return [element for element in elements 
      if text in (element.text or 
         element.get_attribute("textContent") or 
         element.get_attribute("innerText"))] 

# usage 
driver = webdriver.Firefox() 
driver.get(url) 

elements = by_css_containing_text(driver, '#myid .myclass', 'Some Text') 
self.assertTrue(elements) 
self.assertTrue(elements[0].is_displayed()) 

我々は直接querySelectorAllを使用しますがCSSセレクタの検索を行っていないので、これは分度器のようにまったく同じ考え方ではないがありますPython/Seleniumの "find"関数を使用します。

textContentinnerTextの値をチェックする必要があるかどうかもわかりません。「テキスト」を確認するだけで十分です。

+0

css:containsを実装する簡単な方法はありましたか?シンプルなCSSのために非常に複雑です:テキストメソッドを含んでいます。 // a [contains(text()、 "Log Out")]は単純なものとして非常に綺麗に見えます:contains( 'Log Out')はうまくいきません。 –

+0

質問の回答方法は次のとおりです:12月30日16時5:21? –