Capybara Cucumber matchers

时间:2016-08-23 11:17:31

标签: ruby cucumber capybara

我被一位同事要求帮助解决他的问题,但我也一直困扰着它。

他希望通过列表上的文字找到一个可点击的元素。

该列表包含:

cat : B

当他遍历列表时,第一次迭代会按预期点击cat : B。下一次迭代还会点击B1而不是list.each do |cat_item| find('li.category', text: cat_item, :match => :prefer_exact).click

使用的代码是:

public class Main3Activity extends AppCompatActivity {

    Button b1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);        

        b1 = (Button) findViewById(R.id.button_pago);
        b1.setOnClickListener(new View.OnClickListener()   {
            public void onClick(View v)  {
                try {
                    new SendPostRequest().execute();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

    }




    public class SendPostRequest extends AsyncTask<String, Void, String> {

        protected void onPreExecute(){}

        protected String doInBackground(String... arg0) {

            try {

                URL url = new URL("https://www.myweb.com/login_app.php"); 

                JSONObject postDataParams = new JSONObject();
                postDataParams.put("precio", "5000");
                postDataParams.put("texto", "f...h");
                Log.e("params",postDataParams.toString());

                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(15000 /* milliseconds */);
                conn.setConnectTimeout(15000 /* milliseconds */);
                conn.setRequestMethod("POST");
                conn.setDoInput(true);
                conn.setDoOutput(true);

                OutputStream os = conn.getOutputStream();
                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"));
                writer.write(getPostDataString(postDataParams));

                writer.flush();
                writer.close();
                os.close();

                int responseCode=conn.getResponseCode();

                if (responseCode == HttpsURLConnection.HTTP_OK) {

                    BufferedReader in=new BufferedReader(new
                            InputStreamReader(
                            conn.getInputStream()));

                    StringBuffer sb = new StringBuffer("");
                    String line="";

                    while((line = in.readLine()) != null) {

                        sb.append(line);
                        break;
                    }

                    in.close();
                    return sb.toString();

                }
                else {
                    return new String("false : "+responseCode);
                }
            }
            catch(Exception e){
                return new String("Exception: " + e.getMessage());
            }

        }

        @Override
        protected void onPostExecute(String result) {
            Toast.makeText(getApplicationContext(), result,
                    Toast.LENGTH_LONG).show();
        }
    }

    public String getPostDataString(JSONObject params) throws Exception {

        StringBuilder result = new StringBuilder();
        boolean first = true;

        Iterator<String> itr = params.keys();

        while(itr.hasNext()){

            String key= itr.next();
            Object value = params.get(key);

            if (first)
                first = false;
            else
                result.append("&");

            result.append(URLEncoder.encode(key, "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(value.toString(), "UTF-8"));

        }
        return result.toString();
    }
}

看起来好像Capybara只匹配到第一个B并且认为它找到了元素,而不是匹配B1或BE。

有解决方法吗?我尝试了几种方法

0 个答案:

没有答案