2017-12-21 7 views
-1

最近、pythonでseleniumを使用し始め、以下の問題が発生しました。それは単純かもしれないが、私は別の答えを検索しながら多くを試したが、それを解決することはできませんでした。 私は複数のソリューションが、どれも仕事を試してみましたPythonを使用してセレンのsmaeクラス名を持つ2番目のテキストボックスをクリックする方法

<div class="bet-widget-main-row-right"> 
     <div class="bet-widget-main-content"> 
     <div class="bet-params"> 
      <div class="param-wrapper"> 
       <span class="param-label">Label1</span> 
       <div class="param-input -desktop"> 
       <div class="param with-error"> 
        <span class="param-input-wrapper"> 
        <span class="param-currency numeric-value">£</span> 
        <input type="text" class="param-text-input text-input numeric-value" value=".04" tabindex="0" size="3" maxlength="11"> 
        </span> 
       </div> 
       <div class="param-input_ticks"></div> 
      </div> 
      </div> 
      <div class="param-wrapper"> 
      <span class="param-label">Label2</span> 
      <div class="param-input -desktop"> 
       <div class="param"> 
       <span class="param-input-wrapper"> 
        <input type="text" class="param-text-input text-input numeric-value" value="2.18" tabindex="0" size="4" maxlength="8"> 
       </span> 
       </div> 
       <div class="param-input_ticks"></div> 
      </div> 
      </div> 
     </div> 
     </div> 
    <div class="bet-submit"><button class="confirm-bet-button -accented micro-button" type="submit" disabled="" tabindex="0"><span>Button1</span></button></div></div> 

クラス名「のparam-テキスト入力テキスト入力数値価値」を持つ第二のテキストボックスをクリックします:

self.driver.find_element_by_xpath("//[@class='param-text-inp‌​ut.text-input.numeri‌​c-value'][2]").clear‌​() 

self.driver.find_element_by_css_selector("[input.param-text-‌​input.text-input.num‌​eric-value][2]").cle‌​ar() 

self.driver.find_element_by_xpath("//input[@class='param-tex‌​t-input'][2]").clear‌​() 

任意のポインタ/助けていただければ幸いです。

答えて

0

を前記取得し、以下では、第2の入力を選択します:

div.param-wrapper:nth-of-type(2) input.param-text-input.text-input.numeric-value 

これはパラメータを正しくカウントするため、2番目の「param-wrapper」を探しています。

+0

にはオプションはありませんでしたしない限り.. XPathを使用したくなかった魅力のように働きました。うまくいけば、他の提案された解決策も正しいでしょう。 – Nik

+1

@Nik質問の中にxpathのコードトライアルを表示しましたが、あなたがCSSを好むという手がかりを残しませんでした。私はxpathベースのAnswersもあなたの側からの評価が必要だと思います。多くの研究の後、より良い性能を与えるCSSかxpathかどうかは依然として決定的ではありません。いくつかの回答がよりうまく構築されています☺ – DebanjanB

+1

@DebanjanBプラットフォームの使い方が間違っていて、私の質問の中で不完全な情報が出てきたら、私はかなり新しいstackoverflowです。私はまだ学んでおり、あなたのような人々からのサポートをプラットフォーム上でよりうまくやっていきます:) – Nik

0

それは非常に簡単です:

self.driver.find_elements_by_xpath('//input[@Class="param-text-‌​input.text-input.num‌​eric-value"]')[1].clear() 

または

from selenium.webdriver.common.keys import Keys 
self.driver.find_elements_by_xpath('//input[@Class="param-text-‌​input.text-input.num‌​eric-value"]')[1].send_keys(Keys.BACKSPACE) 

あなたが最初の場所でのオブジェクトのリストを作成する必要があります。だから、同じ名前を持つすべてのプレースホルダを見つける必要があります。第2の要素である項目(リストはゼロに基づいているので、1秒)を使用すると、CSSセレクタを使用することを好む場合

乾杯

0

XPathでは、XPath式に対応するn番目のオブジェクトを選択することができます。

これを達成するには、式の最後に[n]を使用します。

あなたが忘れたのは、[n]を追加する前に()を式の周りに置くことです。

したがって、XPathは(//input[@class='param-tex‌​t-input'])[2]である必要があります。 2nd text box with class name 'param-text-input text-input numeric-value'次のコードブロックを使用することができますクリックし

0

self.driver.find_element_by_xpath("//div[@class='bet-params']//following-sibling::input[2]").clear() 
関連する問題